package com.apa7.keepaccounts.service.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.apa7.keepaccounts.dao.BillDao;
import com.apa7.keepaccounts.entity.Bill;
import com.apa7.keepaccounts.entity.PayType;
import com.apa7.keepaccounts.entity.User;
import com.apa7.keepaccounts.service.RecordService;
import com.apa7.keepaccounts.service.UserService;
import com.apa7.keepaccounts.util.Tool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class RecordImpl implements RecordService {

    @Autowired
    private UserService userService;
    @Autowired
    private BillDao billDao;
    private static Logger logger = LoggerFactory.getLogger(RecordImpl.class);

    /**
     * 记录一笔钱~~~~
     * @param key 用户的key值
     * @param money 多少钱（精准到分）
     * @param payTypeId 支出类型的索引ID
     * @param payTypeName 支出类型的名字
     * @param payModeName 支出方式的名字
     * @param time 支出时间
     * @return 记录表的id，0表示未成功
     */
    @Override
    public int set(String key,int money,int payTypeId,String payTypeName,String payModeName,long time) {
        //获取用户信息
        User user=userService.getInfo(key);
        if(user==null)
            return 0;

        //获取payType
        List<PayType> payTypes=JSON.parseArray(user.getPayType(),PayType.class);

        Bill bill=new Bill();
        bill.setMoney(money);
        bill.setPayMode(payModeName);
        bill.setPayType(payTypeName);
        bill.setUserId(user.getUserId());
        bill.setTime(time);
        bill.setPayTypeImg(payTypes.get(payTypeId).getTypeImg());
        billDao.insert(bill);

        return bill.getBillId();
    }

    /**
     * 修改记录一笔钱~~~~
     * @param key 用户的key值
     * @param billId 记录表的id
     * @param money 多少钱（精准到分）
     * @param payTypeId 支出类型的索引ID
     * @param payTypeName 支出类型的名字
     * @param payModeName 支出方式的名字
     * @param time 支出时间
     * @return 错误信息，空字符串表示正确
     */
    @Override
    public String update(String key,int billId,int money,int payTypeId,String payTypeName,String payModeName,long time) {
        //获取用户信息
        User user=userService.getInfo(key);
        if(user==null)
            return "用户信息为空";

        //获取payType
        List<PayType> payTypes=JSON.parseArray(user.getPayType(),PayType.class);

        Bill bill=new Bill();
        bill.setBillId(billId);
        bill.setMoney(money);
        bill.setPayMode(payModeName);
        bill.setPayType(payTypeName);
        bill.setUserId(user.getUserId());
        bill.setTime(time);
        bill.setPayTypeImg(payTypes.get(payTypeId).getTypeImg());
        billDao.updateById(bill);

        return "";
    }

    /**
     * 删除记录
     *
     * @param key    用户的key值
     * @param billId 记录的id
     * @return 错误信息，空字符串表示正确
     */
    @Override
    public String delete(String key, int billId) {
        try {
            //查出此条记录
            Bill bill=billDao.getBillAndUser(billId);
            if(bill==null){
                return "没有查到该记录";
            }

            //核对用户信息
            if(!bill.getUser().getLoginKey().equals(key)){
                return "用户信息和此记录不匹配！";
            }

            //删除
            billDao.deleteById(billId);
            return "";
        }catch (NullPointerException e){
            logger.error("系统发生异常！");
            logger.error("异常信息:"+e.getMessage());
            logger.error(Tool.getExceptionAllinformation_01(e));
            logger.error("以上为异常信息");
            return "用户信息和此记录不匹配";
        }
    }

    /**
     * 获取一条记账的记录
     * @param key 用户的key值
     * @param BillID 记账表的ID
     * @return
     */
    @Override
    public JSONObject getBill(String key,int BillID) {
        return null;
    }
}
